#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=50005;

int n;
int ct[N];
LL d[N];
bool visit[N];
vector<int> edges[N];
int s,t;

void dfs(int fa,int len){
	d[1]+=len;
	visit[fa]=true;
	for(auto u:edges[fa]){
		if(!visit[u]){
			dfs(u,len+1); 
			ct[fa]+=1+ct[u];
		}
	}
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d%d",&s,&t);
		edges[s].emplace_back(t);
		edges[t].emplace_back(s);
	}
	memset(visit,false,sizeof(visit));
	memset(ct,0,sizeof(ct));
	d[1]=0;
	dfs(1,0);
	
//	printf("%d\n",d[1]);
//	for(int i=1;i<=n;i++){
//		printf("%d:%d\n",i,ct[i]);
//	}
	memset(visit,false,sizeof(visit));
	queue<int> que;
	que.push(1);
	int index=1;
	LL minlen=d[1];
	while(!que.empty()){
		int fa=que.front();
		visit[fa]=true;
		que.pop();
		for(auto i:edges[fa]){
			if(!visit[i]){
				d[i]=d[fa]-(ct[i]+1)+(n-ct[i]-1);
				if(d[i]<minlen||(d[i]==minlen&&i<index)){
					minlen=d[i];
					index=i;
				}
				que.push(i);
			}
		}
	}
	printf("%d %d",index,minlen);
//	for(int i=1;i<=n;i++){
//		printf("\n%d:%d\n",i,d[i]);
//	}	
	return 0;
}
